
/* eslint-disable camelcase */
/* eslint-disable new-cap */
import path from 'path';
import vue from '@vitejs/plugin-vue';
import { UserConfigExport, ConfigEnv, loadEnv } from 'vite';
// 自动导入组件
import Components from 'unplugin-vue-components/vite';
// ant按需加载
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
// icons文件夹中的svg图片，注册在全局
// import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
// mock数据
// import { viteMockServe } from 'vite-plugin-mock';
// 自动导入vue和vue-router方法
import AutoImport from 'unplugin-auto-import/vite';
// OptimizationPersist、PkgConfig插件就是启动的时候，必须提前编译好这些依赖，而这些依赖都是会自动写入到package.json
import OptimizationPersist from 'vite-plugin-optimize-persist';
import PkgConfig from 'vite-plugin-package-config';
// vueJsx语法解析
// import vueJsx from '@vitejs/plugin-vue-jsx';
// 解决vue3下 script setup语法糖 下 ，手动设置组件name不方便的问题
import VueSetupExtend from 'vite-plugin-vue-setup-extend-plus';
// 使用 gzip 进行压缩
import viteCompression from 'vite-plugin-compression';

const CWD = process.cwd();
export default ({ command, mode }: ConfigEnv): UserConfigExport => {
  const { VITE_BASE_URL, VITE_IMG_URL } = loadEnv(mode, CWD);
  return {
    css: {
      // css预处理器
      preprocessorOptions: {
        less: {
          charset: false,
          additionalData: `
          @import (reference) "./src/style/variables.less";
          `,
          modifyVars: {
            // 此处也可设置直角、边框色、字体大小等
            // 'primary-color': 'rgb(224, 111, 31)',
          },
          javascriptEnabled: true,
        },
      },
    },
    plugins: [
      vue(),
      // vueJsx(),
      Components({
        resolvers: [
          AntDesignVueResolver({
            importStyle: 'less', // <--------看这行
            resolveIcons: true,
          }),
        ],
        dirs: ['src/components'],
        dts: 'src/components.d.ts',
        // valid file extensions for components.
        extensions: ['vue'],
        // search for subdirectories
        deep: true,
        directives: true,
        include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
        exclude: [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/, /[\\/]\.nuxt[\\/]/],
      }),
      // createSvgIconsPlugin({
      //   iconDirs: [path.resolve(process.cwd(), 'src/icons')],
      //   // 指定symbolId格式
      //   symbolId: 'icon-[dir]-[name]',
      // }),
      viteCompression(),
      // viteMockServe({
      //   // default
      //   mockPath: 'mock',
      //   localEnabled: command === 'serve',
      // }),
      AutoImport({
        imports: ['vue', 'vue-router'],
        // 可以选择auto-import.d.ts生成的位置，使用ts建议设置为'src/auto-import.d.ts'
        dts: 'src/auto-import.d.ts',
      }),
      PkgConfig(),
      OptimizationPersist(),
      VueSetupExtend(),
    ],
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src'),
      },
      extensions: ['.vue', '.js', '.jsx', '.ts', '.tsx'],
    },
    build: {
      minify: 'terser',
      terserOptions: {
        compress: {
          // drop_console: true,
        },
      },
    },
    server: {
      host: '0.0.0.0',
      port: 10088, // 设置服务启动端口号
      open: false, // 设置服务启动时是否自动打开浏览器
      cors: true, // 允许跨域
      // 设置代理，根据项目实际情况配置
      proxy: {
        '/apis': {
          target: VITE_BASE_URL,
          changeOrigin: true,
          secure: false,
          // rewrite: path => path.replace('/apis/', '/'),
        },

      },
    },
  };
};





